local M = _G.CommonOHOH.class.new(script, script.Parent.base,script.Parent.Name);

--游戏状态,0：等待开始一局游戏，1：正在比赛中，2：结算比赛

local game_cfg=_G.CommonOHOH.config.Game
local gWait2startGame=game_cfg.wait2startGame--等待开始一局游戏(开始一局游戏的准备时间)
local gWait2endGame=game_cfg.wait2endGame--等待一局游戏结束时间（即一局游戏的最长时间)
local gWait2showTime=game_cfg.wait2showTime--一局游戏结束的结算时间（showTime，播放获胜者上领奖台动画等）
local maxPlayerVictoryCount =game_cfg.maxPlayerVictoryCount
function M.new(self)
	return M(self);
end;

function M.ctor(self, parent)
	M.super.ctor(self, parent)
    self:AddProcess(function()
        -- self:Wait(5)
        self:Start() --服务器直接进入准备状态
    end)
end;


function M.dtor(self)
	M.super.dtor(self);
end

local HTTP = game:GetService("HttpService")
function M.SynReachPlayers(self)
    print(self.ReachPlayers)
    self.Game.attribute.ReachPlayers=HTTP:JSONEncode(self.ReachPlayers)
end

-- 清楚倒计时
function M.ClearWait(self)
    if  self.WaitConn then
        self.WaitConn:Disconnect()
        self.WaitConn=nil
    end
end

--游戏状态,0：等待开始一局游戏，1：正在比赛中，2：结算比赛
function M.SetSate(self,sate)
    M.super.SetSate(self, sate)
    self.Game.attribute.GameState=self.State
    self.Game.attribute.StateTime=self.StateTime
end

----------------------公开接口------------------------------------

--游戏结束 showTime时间
function M.ShowTime(self)
    self:ClearWait()
    M.super.ShowTime(self)
    
    local t=gWait2showTime

    if #self.ReachPlayers==0 then
        t=1
        self.Game.TimeOutEvent:Action() 
    end

    self.WaitConn=self:AddProcess(function()
        self:Wait(t)
        self:Ready()
    end)

end


--准备开始一场游戏
function M.Ready(self)
    self:ClearWait()
    M.super.Ready(self)
    self.WaitConn=self:AddProcess(function()
        self:Wait(gWait2startGame)
        self:Start()
    end)
end

--开始一局游戏
function M.Start(self)
    self:ClearWait()
    self.ReachPlayers = {}
    self:SynReachPlayers()
    M.super.Start(self)
    self.WaitConn= self:AddProcess(function()
        self:Wait(gWait2endGame)
        self:SynReachPlayers()
        if  self.ReachTheEndConn then
            self.ReachTheEndConn:Disconnect()
            self.ReachTheEndConn=nil
        end
        self:ShowTime()
    end)
    --监听玩家到达终点
   self.ReachTheEndConn= self.Game.ReachTheEndEvent:Connect(function(userId)
        table.insert(self.ReachPlayers,userId)
        self:SynReachPlayers()
        if #self.ReachPlayers==maxPlayerVictoryCount then --有三位玩家到达终点，结束游戏
            if  self.ReachTheEndConn then
                self.ReachTheEndConn:Disconnect()
                self.ReachTheEndConn=nil
            end
        self:ShowTime()
        end
    end)


end



return M